SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[SP_TXMVTO_CNTB_Q62]
/*-------------------------------------------------------------------*/
/*----- Empresa           : OFISIS S.A.                          ----*/
/*----- Cliente           : OFISIS S.A.                          ----*/
/*----- Sistema           : Contabilidad                         ----*/
/*----- Modulo            : Empresa                              ----*/
/*----- Programa          : Reparos Tributarios                  ----*/
/*----- Nombre            : SP_TXMVTO_CNTB_Q62                   ----*/
/*----- Script            : SP_TXMVTO_CNTB_Q62                   ----*/
/*----- Desarrollado por  : Rocio Caldas                         ----*/
/*----- Fecha             : 15/11/2007                           ----*/
/*----- Base de Datos     : MS SQL Server                        ----*/
/*----- Version BD        : 6.5                                  ----*/
/*-------------------------------------------------------------------*/
/*----- Modificado 1 por  :				                         ----*/
/*----- Fecha Modifica    :			                             ----*/
/*----- Detalle Modifica  :										-----*/
/*-----												             ----*/
/*-------------------------------------------------------------------*/
/*----- Drop proc SP_TXMVTO_CNTB_Q62                             ----*/
/*----- Grant all on SP_TXMVTO_CNTB_Q62 to PUBLIC                ----*/
/*----- EXEC SP_TXMVTO_CNTB_Q62 '01','001',1,2007,10,''           ----*/
/*-------------------------------------------------------------------*/
@ISCO_EMPR TD_VC_002,
@ISCO_UNID_CNTB TD_VC_003,
@INNU_CNTB_EMPR TD_IN_001_CONT,
@INNU_ANNO TD_IN_004_ANNO,
@INNU_MESE TD_IN_002,
@ISCO_WHER_LOCA Varchar(8000)
AS

Declare 
@VNNU_MESE       int,
@VSME_SELE       VARCHAR(200),
@VNMO_SELE       NUMERIC(16,4),
@VNMO_SELE1      NUMERIC(16,4),
@VNMO_ACUM       NUMERIC(16,4),
@VSNU_CNTB_EMPR  VARCHAR(1),
@VNNU_CNTB_EMP1 VARCHAR(1),
@VNNU_CNTB_EMP2 VARCHAR(1),
@VNNU_CNTB_CONV VARCHAR(1),
@VSNU_ANNO       VARCHAR(4),
@VSNU_MES1       VARCHAR(2),
@VSCO_CNTA_EMPR  VARCHAR(20),
@VNIM_CNTB       NUMERIC(16,4),
@CSCO_CNTA       VARCHAR(20),
@VNTO_CNTB_CARG  NUMERIC(16,4),
@VNTO_CNTB_ABON  NUMERIC(16,4)

CREATE TABLE #TWTXMVTO_CNTB
(CO_CNTA_QUIE VARCHAR(20) null,
 CO_CNTA_EMPR VARCHAR(20) null,
 DE_CNTA_EMPR VARCHAR(100) null,
 SD_ENER	  NUMERIC(16,4)null,
 SD_FEBR	  NUMERIC(16,4)null,
 SD_MARZ      NUMERIC(16,4)null,
 SD_ABRI      NUMERIC(16,4)null,
 SD_MAYO      NUMERIC(16,4)null,
 SD_JUNI      NUMERIC(16,4)null,
 SD_JULI      NUMERIC(16,4)null,
 SD_AGOS      NUMERIC(16,4)null,
 SD_SETI      NUMERIC(16,4)null,
 SD_OCTU      NUMERIC(16,4)null,
 SD_NOVI      NUMERIC(16,4)null,
 SD_DICI      NUMERIC(16,4)null,
 TO_CNTB_SOLE NUMERIC(16,4)null,
 TO_CNTB_DOLA NUMERIC(16,4)null)

CREATE TABLE #TWTXMVTO_CNTB1 (
	NU_CNTB_EMPR INT		   NULL,
	CO_UNID_CNTB VARCHAR(3)    NULL,
	CO_OPRC_CNTB VARCHAR(3)    NULL,
	NU_ANNO      INT		   NULL,
	NU_MESE      INT	       NULL,
	CO_CNTA_EMPR VARCHAR(20)   NULL,
	TI_AUXI_EMPR VARCHAR(1)    NULL,
	CO_AUXI_EMPR VARCHAR(20)   NULL,
	TI_OPER		 VARCHAR(3)    NULL,
	IM_MVTO_CNTB NUMERIC(16,4) NULL,
	CO_ORDE_SERV VARCHAR(20)   NULL)


CREATE TABLE #TWTXMVTO_CNTB3
(CO_CNTA_EMPR VARCHAR(20) null,
 TO_CNTB_CARG NUMERIC(16,4)null,
 TO_CNTB_ABON NUMERIC(16,4)null)

Select @VSNU_CNTB_EMPR = LTRIM(RTRIM(Convert (VARCHAR, @INNU_CNTB_EMPR)))    
Select @VSNU_ANNO = LTRIM(RTRIM(Convert (VARCHAR, @INNU_ANNO)))    
Select @VSNU_MES1 = LTRIM(RTRIM(Convert (VARCHAR, @INNU_MESE)))    
/*
Select @VNNU_CNTB_EMP1=NU_CNTB_EMPR 
FROM TMPARA_CONT WHERE CO_EMPR=@ISCO_EMPR*/
Select @VNNU_MESE=0


---INSERTANDO EN EL TEMPORAL PARA HACER EL FILTRO RESPECTIVO
EXEC('INSERT INTO #TWTXMVTO_CNTB1(NU_CNTB_EMPR,CO_UNID_CNTB,CO_OPRC_CNTB ,NU_ANNO,NU_MESE,
CO_CNTA_EMPR ,TI_AUXI_EMPR ,CO_AUXI_EMPR ,TI_OPER,IM_MVTO_CNTB ,CO_ORDE_SERV )
SELECT NU_CNTB_EMPR,CO_UNID_CNTB,CO_OPRC_CNTB,NU_ANNO, NU_MESE,CO_CNTA_EMPR,
TI_AUXI_EMPR,CO_AUXI_EMPR,TI_OPER,IM_MVTO_CNTB,CO_ORDE_SERV
FROM TXMVTO_CNTB 
WHERE CO_EMPR="' + @ISCO_EMPR + '" 
AND NU_CNTB_EMPR = ' +  @VSNU_CNTB_EMPR + '
AND CO_UNID_CNTB="' + @ISCO_UNID_CNTB + '" 
AND NU_ANNO=' + @VSNU_ANNO + @ISCO_WHER_LOCA + ' 
AND NU_MESE <=' + @VSNU_MES1 + '  
And NU_MESE NOT IN (0,13) 
AND ST_REPA="S"
AND SI_MVTO_CNTB="APR" 
And ST_DIFE_CAMB="N"
And ST_REDO="N" 
And ST_GEST= "N"  ')

--BLOQUE PARA HACER LA BARRIDA DE LOS MESES
While @VNNU_MESE<@INNU_MESE
begin 

Select @VNNU_MESE=@VNNU_MESE+1

IF @VNNU_MESE=1  
BEGIN SELECT @VSME_SELE='SD_ENER' END
IF @VNNU_MESE=2  
BEGIN SELECT @VSME_SELE='SD_FEBR' END
IF @VNNU_MESE=3  
BEGIN SELECT @VSME_SELE='SD_MARZ' END
IF @VNNU_MESE=4  
BEGIN SELECT @VSME_SELE='SD_ABRI' END
IF @VNNU_MESE=5  
BEGIN SELECT @VSME_SELE='SD_MAYO' END
IF @VNNU_MESE=6  
BEGIN SELECT @VSME_SELE='SD_JUNI' END
IF @VNNU_MESE=7  
BEGIN SELECT @VSME_SELE='SD_JULI' END
IF @VNNU_MESE=8  
BEGIN SELECT @VSME_SELE='SD_AGOS' END
IF @VNNU_MESE=9  
BEGIN SELECT @VSME_SELE='SD_SETI' END
IF @VNNU_MESE=10  
BEGIN SELECT @VSME_SELE='SD_OCTU' END
IF @VNNU_MESE=11  
BEGIN SELECT @VSME_SELE='SD_NOVI' END
IF @VNNU_MESE=12  
BEGIN SELECT @VSME_SELE='SD_DICI' END

---CURSOR POR CUENTA CONTABLE
Declare SP_TXMVTO_CNTB_Q62_1 Cursor For                     
Select DISTINCT CO_CNTA_EMPR                    
From #TWTXMVTO_CNTB1                    
Where  
 NU_CNTB_EMPR=@INNU_CNTB_EMPR
 AND CO_UNID_CNTB=@ISCO_UNID_CNTB 
 AND NU_ANNO=@VSNU_ANNO 
 AND NU_MESE=@VNNU_MESE
 ORDER BY CO_CNTA_EMPR

Open SP_TXMVTO_CNTB_Q62_1                      
Fetch SP_TXMVTO_CNTB_Q62_1 Into @CSCO_CNTA  
While @@Fetch_status = 0                      
Begin  

SELECT @VNTO_CNTB_CARG=0
SELECT @VNTO_CNTB_ABON=0

--OBTENGO LOS MONTOS CARGADOS
SELECT @VNTO_CNTB_CARG=SUM(ISNULL(IM_MVTO_CNTB,0))
FROM #TWTXMVTO_CNTB1 T1
WHERE 
T1.NU_CNTB_EMPR=@INNU_CNTB_EMPR
AND T1.CO_UNID_CNTB=@ISCO_UNID_CNTB
AND T1.NU_ANNO=@VSNU_ANNO
AND T1.NU_MESE=@VNNU_MESE
AND T1.CO_CNTA_EMPR=@CSCO_CNTA
AND T1.TI_OPER='CAR'
GROUP BY T1.CO_CNTA_EMPR

--OBTENGO LOS MONTOS ABONADOS
SELECT @VNTO_CNTB_ABON=SUM(ISNULL(IM_MVTO_CNTB,0))
 FROM #TWTXMVTO_CNTB1 T1
 WHERE 
 T1.NU_CNTB_EMPR=@INNU_CNTB_EMPR
 AND T1.CO_UNID_CNTB=@ISCO_UNID_CNTB
 AND T1.NU_ANNO=@VSNU_ANNO
 AND T1.NU_MESE=@VNNU_MESE
 AND T1.CO_CNTA_EMPR=@CSCO_CNTA
 AND T1.TI_OPER='ABO'
 GROUP BY T1.CO_CNTA_EMPR


IF EXISTS(SELECT * FROM #TWTXMVTO_CNTB1)
BEGIN 

INSERT INTO #TWTXMVTO_CNTB3(CO_CNTA_EMPR,TO_CNTB_CARG,TO_CNTB_ABON)
VALUES(@CSCO_CNTA,@VNTO_CNTB_CARG,@VNTO_CNTB_ABON)

END

IF NOT EXISTS(SELECT * FROM #TWTXMVTO_CNTB
              WHERE CO_CNTA_EMPR=@CSCO_CNTA)
 BEGIN
 EXEC('INSERT INTO #TWTXMVTO_CNTB(CO_CNTA_QUIE,CO_CNTA_EMPR,DE_CNTA_EMPR,' +@VSME_SELE+ ')
 SELECT DISTINCT LEFT(T1.CO_CNTA_EMPR,2) ,T1.CO_CNTA_EMPR,T3.DE_CNTA_EMPR,
ISNULL(TO_CNTB_CARG,0)-ISNULL(TO_CNTB_ABON,0)
 FROM #TWTXMVTO_CNTB3 T1
 INNER JOIN TMPLAN_EMPR T3 ON T3.CO_EMPR="' + @ISCO_EMPR + '" 
 AND T1.CO_CNTA_EMPR=T3.CO_CNTA_EMPR
 AND T1.CO_CNTA_EMPR="' + @CSCO_CNTA + '"
')
DELETE FROM #TWTXMVTO_CNTB3

END
ELSE
BEGIN 

 SELECT @VNIM_CNTB=ISNULL(TO_CNTB_CARG,0)-ISNULL(TO_CNTB_ABON,0)
 FROM #TWTXMVTO_CNTB3 
 WHERE CO_CNTA_EMPR= @CSCO_CNTA

IF @VNIM_CNTB!=0 
BEGIN 
EXEC('UPDATE #TWTXMVTO_CNTB SET ' +@VSME_SELE+ '='+@VNIM_CNTB+'
WHERE CO_CNTA_EMPR= "' + @CSCO_CNTA + '" ')
END

DELETE FROM #TWTXMVTO_CNTB3

END 

SELECT @VNTO_CNTB_CARG=SUM(ISNULL(IM_MVTO_CNTB,0))
FROM #TWTXMVTO_CNTB1 T1
WHERE 
T1.NU_CNTB_EMPR=@INNU_CNTB_EMPR
AND T1.CO_UNID_CNTB=@ISCO_UNID_CNTB
AND T1.NU_ANNO=@VSNU_ANNO
AND T1.NU_MESE<=@INNU_MESE
AND T1.NU_MESE NOT IN (0,13)
AND T1.CO_CNTA_EMPR=@CSCO_CNTA
AND T1.TI_OPER='CAR'
GROUP BY T1.CO_CNTA_EMPR

SELECT @VNTO_CNTB_ABON=SUM(ISNULL(IM_MVTO_CNTB,0))
FROM #TWTXMVTO_CNTB1 T1
WHERE 
T1.NU_CNTB_EMPR=@INNU_CNTB_EMPR
AND T1.CO_UNID_CNTB=@ISCO_UNID_CNTB
AND T1.NU_ANNO=@VSNU_ANNO
AND T1.NU_MESE<=@INNU_MESE
AND T1.NU_MESE NOT IN (0,13)
AND T1.CO_CNTA_EMPR=@CSCO_CNTA
AND T1.TI_OPER='ABO'
GROUP BY T1.CO_CNTA_EMPR

IF EXISTS(SELECT * FROM #TWTXMVTO_CNTB1)
BEGIN

INSERT INTO #TWTXMVTO_CNTB3(CO_CNTA_EMPR,TO_CNTB_CARG,TO_CNTB_ABON)
VALUES(@CSCO_CNTA,@VNTO_CNTB_CARG,@VNTO_CNTB_ABON) 

END

SELECT @VNMO_SELE=TO_CNTB_CARG-TO_CNTB_ABON
FROM #TWTXMVTO_CNTB3
WHERE CO_CNTA_EMPR=@CSCO_CNTA

UPDATE #TWTXMVTO_CNTB SET TO_CNTB_SOLE=@VNMO_SELE
WHERE CO_CNTA_EMPR=@CSCO_CNTA

DELETE FROM #TWTXMVTO_CNTB3


SELECT @VNTO_CNTB_CARG=0
SELECT @VNTO_CNTB_ABON=0
/*
IF @VNNU_CNTB_EMP1=@INNU_CNTB_EMPR
BEGIN
SELECT @VNNU_CNTB_EMP2=1
END
ELSE
BEGIN 
SELECT @VNNU_CNTB_EMP2=@VNNU_CNTB_EMP1
END
*/
/*
SELECT @VNTO_CNTB_CARG=SUM(ISNULL(IM_MVTO_CNTB,0))
FROM #TWTXMVTO_CNTB1 T1
WHERE 
 T1.NU_CNTB_EMPR=@VNNU_CNTB_EMP2
AND T1.CO_UNID_CNTB=@ISCO_UNID_CNTB
AND T1.NU_ANNO=@VSNU_ANNO
AND T1.NU_MESE<=@INNU_MESE
AND T1.NU_MESE NOT IN (0,13)
AND T1.CO_CNTA_EMPR=@CSCO_CNTA
AND T1.TI_OPER='CAR'
GROUP BY T1.CO_CNTA_EMPR

SELECT @VNTO_CNTB_ABON=SUM(ISNULL(IM_MVTO_CNTB,0))
FROM #TWTXMVTO_CNTB1 T1
WHERE 
T1.NU_CNTB_EMPR=@VNNU_CNTB_EMP2
AND T1.CO_UNID_CNTB=@ISCO_UNID_CNTB
AND T1.NU_ANNO=@VSNU_ANNO
AND T1.NU_MESE<=@INNU_MESE
AND T1.NU_MESE NOT IN (0,13)
AND T1.CO_CNTA_EMPR=@CSCO_CNTA
AND T1.TI_OPER='ABO'
GROUP BY T1.CO_CNTA_EMPR
*/
/*
IF EXISTS(SELECT * FROM #TWTXMVTO_CNTB1)
BEGIN

INSERT INTO #TWTXMVTO_CNTB3(CO_CNTA_EMPR,TO_CNTB_CARG,TO_CNTB_ABON)
VALUES(@CSCO_CNTA,@VNTO_CNTB_CARG,@VNTO_CNTB_ABON) 

END

SELECT @VNMO_SELE=TO_CNTB_CARG-TO_CNTB_ABON
FROM #TWTXMVTO_CNTB3
WHERE CO_CNTA_EMPR=@CSCO_CNTA

UPDATE #TWTXMVTO_CNTB SET TO_CNTB_DOLA=@VNMO_SELE
WHERE CO_CNTA_EMPR=@CSCO_CNTA
*/


Fetch SP_TXMVTO_CNTB_Q62_1 Into @CSCO_CNTA                      
End                      
Close SP_TXMVTO_CNTB_Q62_1                      
Deallocate SP_TXMVTO_CNTB_Q62_1  

END 

SELECT CO_CNTA_QUIE,CO_CNTA_EMPR,DE_CNTA_EMPR,
'SD_ENER'=ISNULL(SD_ENER,0),'SD_FEBR'=ISNULL(SD_FEBR,0),'SD_MARZ'=ISNULL(SD_MARZ,0),
'SD_ABRI'=ISNULL(SD_ABRI,0),'SD_MAYO'=ISNULL(SD_MAYO,0),'SD_JUNI'=ISNULL(SD_JUNI,0),
'SD_JULI'=ISNULL(SD_JULI,0),'SD_AGOS'=ISNULL(SD_AGOS,0),'SD_SETI'=ISNULL(SD_SETI,0),
'SD_OCTU'=ISNULL(SD_OCTU,0),'SD_NOVI'=ISNULL(SD_NOVI,0),'SD_DICI'=ISNULL(SD_DICI,0),
'TO_CNTB_SOLE'=ISNULL(TO_CNTB_SOLE,0)--,'TO_CNTB_DOLA'=ISNULL(TO_CNTB_DOLA,0) 
 FROM #TWTXMVTO_CNTB
ORDER BY CO_CNTA_QUIE,CO_CNTA_EMPR


GO
